跳到主要内容

Hadoop 面试题

Hadoop 中常问的就三块,第一:分布式存储(HDFS);第二:分布式计算框架(MapReduce);第三:资源调度框架(YARN)。

1.请说下HDFS读写流程;

HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

HDFS 写流程

1、 客户端发送上传请求,并通过RPC与NameNode建立通信NameNode检查用户是否有上传权限,上传的文件在HDFS对应的目录下是否同名如果其中任何一个不满足,就会直接报错如果两者都满足,将向客户端返回一个可以上传的消息;

2、 客户端根据文件大小划分文件,默认为128M,向NameNode发送请求,请求将第一块上传到哪些服务器;

3、 收到请求后,NameNode根据网络拓扑、机架感知和副本机制分配文件,并返回可用DataNode的地址;

4、 接收到地址后,客户端与服务器地址列表中的一个节点进行通信,比如A,本质上是RPC调用建立管道a收到请求后会继续调用B,B会调用C来完成整个管道的建立,并逐步返回给客户端;

5、 客户端开始向A发送第一个块(先从磁盘读取数据,然后放入本地内存缓存),这个块是基于包的(64kb),A收到一个包就会发送;

发送给B,然后B发送给c,A在发送完一个包后会将其放入一个响应队列中等待响应;

6、 数据被分成数据包,依次在流水线上传输在管道反向传输中,逐个发送ack(命令回答正确),最后管道中第一个DataNode节点A向客户端发送pipelineack;7.当一个块传输完成后,客户端请求NameNode再次上传第二个块,NameNode为客户端重新选择三个DataNode;

 

HDFS 读流程

1、 客户端向NameNode发送RPC请求请求文件块的位置;

2、 NameNode收到请求后会检查用户权限以及是否有这个文件如果它们都匹配,它将根据需要返回部分或全部阻止列表对于每个块,NameNode将返回包含该块副本的DataNode地址;这些返回的DataNode地址会根据集群拓扑得到DataNode到客户端的距离,然后按照两个规则进行排序:网络拓扑中离客户端最近的排在第一位;心跳机制中超上报的DataNode状态陈旧,较低;